#pragma once
#ifndef GLOBAL_PARA_ACUT 
#define GLOBAL_PARA_ACUT
#include "TStyle.h"
#include <vector>
#include <iostream>
#include "src/Lib/MessageFormat.h"
#include "kinematic.h"
//single cut
class ACut{
	public:
		bool     SWITCH ;
		double   obj    ;
		double   d  ;
		double   u  ;

		ACut(){
			init();
		}

	   	void init(){
			SWITCH = false;
			obj    = 0.0;
			d  = 0.0;
			u  = 10000.0;
		}

		void Set_Pt_Cut(CPT   pt_cut  , int i);

		void Set_Eta_Cut(CETA  eta_cut , int i);

		void Set_Mass_Cut(CMASS mass_cut, int i);

		void Set_Mt_Cut(CMT mt_cut, int i);

		void Print(int level = 2, std::string cut_name="");

};

std::ostream & operator<<(std::ostream & ostr, ACut& cut);

//multi-cuts
class ACuts{
	public:
		ACut m;
		ACut mt;//mt cut is the same as m cut
		ACut pt;
		ACut eta;

		ACuts(){
			m.init();
			mt.init();
			pt.init();
			eta.init();
		}

		void Print(int level = 2, std::string cut_name="");
};

class CCombine_cut: public CPT, public CETA, public CTHETA, public CMASS, public CMT{
	private:
	public:
		int  CUT_num ;
		std::vector<bool> JCUT;

		void Print(); 
};

class ACuts_Vector{
	public:
		std::vector<ACuts> cut_vector;

		void Set_Mass_Cut(CMASS &mass_cut);

		void Set_Mt_Cut(CMT &mt_cut);

		void Set_Pt_Cut(CPT &pt_cut);

		void Set_Eta_Cut(CETA &eta_cut);

		void Set_Cuts(CCombine_cut &comb_cut);

		void Print(int level = 2, std::string cut_name="");
};

//std::ostream & operator<<(std::ostream & ostr, ACuts_Vector & cuts);
#endif
